home *** CD-ROM | disk | FTP | other *** search
/ Educational Software Cooperative 4 / Educational Software Cooperative 4.iso / lights22 / weep.cpr / SS_CDEM2.C < prev    next >
C/C++ Source or Header  |  1995-06-22  |  3KB  |  189 lines

  1.  
  2.  
  3. #include <windows.h>
  4.  
  5.  
  6. /* Prototyp für Funktion aus lm_util.dll */
  7. BYTE FAR PASCAL LgdDefProc (LPLONG lRet, HWND hWnd, WORD msg, WORD wParam, LONG lParam);
  8.  
  9.  
  10.  
  11.  
  12. /* Globale Variable */
  13. /* suboptimale lösung, aber egal ... */
  14.  
  15. LONG fExit;
  16. LONG lEndTime;
  17.  
  18. #define DUMMYREFERENCE(a) (a)=(a)
  19.  
  20. typedef struct tagGLOBALS
  21. {
  22.   HANDLE hInstance;
  23. } GLOBALS;
  24.  
  25. extern GLOBALS globaldata;
  26.  
  27.  
  28.  
  29.  
  30. #define APPNAME "cBlackness"
  31.  
  32. /* WindowProc des Bildschirmschoners */
  33. /* In der Regel wird der Schoner über WM_TIMER bzw. über PeekMessage bestimmte
  34.   Zeichenaktionen ausloesen.
  35. */
  36.  
  37. LONG FAR _export PASCAL WindowProc (HWND hwnd, WORD msg, WORD wParam, LONG lParam)
  38. {
  39.   PAINTSTRUCT ps;
  40.   HDC dc;
  41.   LONG lRet;
  42.  
  43.   if (LgdDefProc (&lRet, hwnd, msg, wParam, lParam))
  44.   {
  45.     return lRet;
  46.   }
  47.  
  48.   switch (msg)
  49.   {
  50.     case WM_PAINT:
  51.     dc = BeginPaint (hwnd, &ps);
  52.     DUMMYREFERENCE (dc);
  53.     EndPaint (hwnd, &ps);
  54.     break;
  55.  
  56.     /*case WM_CREATE:*/
  57.  
  58. /*   case WM_ERASEBKGND:
  59.      return 1;
  60. */            /* bildschirm stehen lassen */
  61.  
  62.     case WM_SIZE:
  63. /*    cxClient = LOWORD (lParam);
  64.     cyClient = HIWORD (lParam);*/
  65.     break;
  66.  
  67.     case WM_TIMER:
  68.     if (GetCurrentTime () >= lEndTime)
  69.     {
  70.       fExit = 0;
  71.       DestroyWindow (hwnd);
  72.     }
  73.     break;
  74.  
  75.     case WM_KILLFOCUS:
  76.     if (fExit == -1)
  77.     {
  78.       fExit = 2;
  79.       DestroyWindow (hwnd);
  80.     }
  81.     break;
  82.  
  83.  
  84.     case WM_KEYDOWN:          /* jeder tastendruck beendet den Saver */
  85.     case WM_CLOSE:
  86.     case WM_LBUTTONDOWN:
  87.     case WM_MBUTTONDOWN:
  88.     case WM_RBUTTONDOWN:
  89.     fExit = 1;   /* randomizer mu▀ zwischen timeout und abbruch unterscheiden k÷nnen! */
  90.     DestroyWindow (hwnd);
  91.     break;
  92.  
  93.     case WM_DESTROY:
  94.     KillTimer (hwnd, 1000);
  95.     PostQuitMessage(0);
  96.     break;
  97.  
  98.     default:
  99.       return DefWindowProc(hwnd, msg, wParam, lParam);
  100.   }
  101.   return 0;
  102. }
  103.  
  104.  
  105.  
  106.  
  107. LONG Blackness (LONG lDuration, LONG lFlags)
  108. {
  109.   HWND hwnd;
  110.   MSG msg;
  111.   int i, cCursor;
  112.   WNDCLASS wndclass;
  113.  
  114.   DUMMYREFERENCE (lFlags);
  115.  
  116.   fExit = -1;
  117.   if (TRUE)
  118.   {
  119.     wndclass.style        = CS_HREDRAW | CS_VREDRAW;
  120.     wndclass.lpfnWndProc  = WindowProc;
  121.     wndclass.cbClsExtra   = 0;
  122.     wndclass.cbWndExtra   = 0;
  123.     wndclass.hInstance    = globaldata.hInstance;
  124.     wndclass.hIcon        = 0;
  125.     wndclass.hCursor      = LoadCursor(0, IDC_CROSS);
  126.     wndclass.hbrBackground= GetStockObject(BLACK_BRUSH);
  127.     wndclass.lpszMenuName = NULL;
  128.     wndclass.lpszClassName= APPNAME;
  129.  
  130.     if (!RegisterClass(&wndclass))
  131.     {
  132.     }
  133.   }
  134.  
  135.   hwnd = CreateWindow(
  136.     APPNAME,
  137.     APPNAME,
  138.     WS_POPUP | WS_BORDER,
  139.     CW_USEDEFAULT,
  140.     CW_USEDEFAULT,
  141.     CW_USEDEFAULT,
  142.     CW_USEDEFAULT,
  143.     0,
  144.     0,
  145.     globaldata.hInstance,
  146.     NULL);
  147.   UpdateWindow(hwnd);
  148.   SetWindowPos (hwnd, 0, -1, -1,
  149.         GetSystemMetrics (SM_CXSCREEN)+2,
  150.         GetSystemMetrics (SM_CYSCREEN)+2,
  151.         SWP_NOZORDER);
  152.  
  153.   ShowWindow (hwnd, SW_NORMAL);
  154.  
  155.   cCursor = 0;
  156.   do
  157.   {
  158.     i = ShowCursor (FALSE);
  159.     cCursor++;
  160.   }
  161.   while (i >= 0);
  162.  
  163.   if (lDuration > 0)
  164.   {
  165.     lEndTime = GetCurrentTime () + lDuration * 1000;
  166.   }
  167.   else
  168.   {
  169.     lEndTime = 0x7fffffffL;
  170.   }
  171.  
  172.   SetTimer (hwnd, 1000, 1, NULL);
  173.  
  174.   while (GetMessage(&msg, 0, 0, 0))
  175.   {
  176.     TranslateMessage(&msg);
  177.     DispatchMessage(&msg);
  178.   }
  179.  
  180.   while (cCursor > 0)
  181.   {
  182.     ShowCursor (TRUE);
  183.     cCursor--;
  184.   }
  185.  
  186.   UnregisterClass (APPNAME, globaldata.hInstance);
  187.   return fExit;
  188. }
  189.